/**
 * Generali Solutions d'assurances - Tous droits réservés &copy; 2007 - 2010
 */
package fr.generali.accueilclient.gael.consultermenu.services.impl;

import javax.xml.ws.WebServiceException;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

import fr.generali.accueilclient.commun.exception.AccueilClientBusinessException;
import fr.generali.accueilclient.commun.exception.AccueilClientTechnicalException;
import fr.generali.accueilclient.gael.consultermenu.om.IGroupe;
import fr.generali.accueilclient.gael.consultermenu.om.IUtilisateurMenu;
import fr.generali.accueilclient.gael.consultermenu.services.IConsulterMenuListeProduitsService;
import fr.generali.gael.habilitations.consultermenu.DtoGroupe;
import fr.generali.gael.habilitations.consultermenu.services.CXFTechnicalException;
import fr.generali.gael.habilitations.consultermenu.services.IConsulterMenuWebService;
import fr.generali.gael.habilitations.consultermenu.services.MenusBusinessException;
import fr.generali.gael.habilitations.consultermenu.services.MenusTechnicalException;

/**
 * @author Holmes Kelly
 */
@Service("consulterMenuListeProduits")
public class ConsulterMenuListeProduitsService implements IConsulterMenuListeProduitsService {

    /**
     * LOGGER
     */
    private static final Logger LOGGER = LoggerFactory.getLogger(ConsulterMenuListeProduitsService.class);

    /**
     * Appel web services consulter menu produits
     */
    @Autowired
    @Qualifier("consulterMenuWebService")
    private IConsulterMenuWebService consulterMenuWebService;

    /**
     * Appel mapper menu liste produits
     */
    @Autowired
    @Qualifier("consulterMenuListeProduitsMapper")
    private ConsulterMenuListeProduitsMapper consulterMenuListeProduitsMapper;

    /**
     * {@inheritDoc}
     */
    @Override
    public IGroupe constituerMenuListeProduits(IUtilisateurMenu utilisateurMenu, String groupId)
                    throws AccueilClientBusinessException {

        IGroupe groupe = null;

        if (utilisateurMenu != null) {

            try {
                DtoGroupe dtoGroupe =
                                consulterMenuWebService.constituerMenu(consulterMenuListeProduitsMapper
                                                .mapperUtilisateurMenu2DtoUtilisateurMenu(utilisateurMenu), groupId);

                if (dtoGroupe != null) {

                    groupe = consulterMenuListeProduitsMapper.mapperDtoGroupe2Groupe(dtoGroupe);
                }

            } catch (WebServiceException e) {
                LOGGER.debug(e.getMessage());
                throw new AccueilClientTechnicalException(e.getMessage());
            } catch (MenusBusinessException e) {
                LOGGER.debug(e.getMessage());
                throw new AccueilClientBusinessException(e.getMessage(), e);
            } catch (MenusTechnicalException e) {
                LOGGER.debug(e.getMessage());
                throw new AccueilClientTechnicalException(groupId, e);
            } catch (CXFTechnicalException e) {
                throw new AccueilClientTechnicalException(e.getMessage(), e);
            }
        }

        return groupe;
    }

}
